<?php
namespace app\service;
use app\service\BaseService;
use think\facade\Log;
use think\facade\Filesystem;
use think\facade\Validate;
use app\model\Applets;

class SystemService extends BaseService{

	//小程序列表
	public function getminiprograminfo($input){
		$result=Applets::queryMiniProgramInfo($input->appId);
		if(!$result){
			return $this->return_err();
		}
		return $this->return_msg($result);
	}


	//下载小程序源码
	public function downsource($input){
		// http://local.mp.cn/app/downminiapppackage/123

		// 文件路径
		$file_path = getcwd()."/sourcePackages/".$input->appId.".zip";

		// 获取文件名
    	$filename = basename($file_path);

	    // 设置响应头
	    header('Content-Description: File Transfer');
	    header('Content-Type: application/octet-stream'); // 通用二进制流类型
	    header('Content-Disposition: attachment; filename="' . basename($file_path) . '"');
	    // header('Expires: 0');
	    header('Cache-Control: must-revalidate');
	    header('Pragma: public');
	    header('Content-Length: ' . filesize($file_path));
	    
	    // 读取并输出文件内容
	    readfile($file_path);
	    exit;

		/*return $this->return_msg([
			"file"=>"http://local.mp.cn/sourcePackages/".$input->appId.".jpg"
		]);*/
	}


    /**
     * 上传提交小程序源码
     * @param  Request $appId [appId]
     * @return [array]         [数组]
     */
	public function commitsource($input){
		$appId = $input->param('appId', '');
		$windowWidth = $input->param('windowWidth', 400);
		$windowHeight = $input->param('windowHeight', 600);
		$entryPath = $input->param('entryPath', '');

		if(empty($appId)){
        	return $this->return_err(['msg'=>'缺少参数appid']);
		}

        // 获取表单上传文件
        $file = $input->file('file');

        // 验证文件是否上传成功
        if (empty($file)) {
        	return $this->return_err(['msg'=>'文件上传失败']);
        }
        /*if (!$file->checkExt(['jpg', 'jpeg', 'png', 'gif'])) {
		    return json(['status' => 'error', 'message' => '不允许的文件类型']);
		}

		if (!$file->checkSize(5 * 1024 * 1024)) {
		    return json(['status' => 'error', 'message' => '文件太大']);
		}*/

		/*$appInfo=Applets::queryMiniProgramInfo($appId);
		if(!$appInfo){
        	return $this->return_err(['msg'=>'小程序信息不符']);
		}*/
 
 		/*$filePath=getcwd() . '/sourcePackages';
        // 移动到框架应用根目录/sourcePackages/ 目录下
        $info = $file->move($filePath,'');*/

        /*// 验证文件大小是否不超过2MB，文件类型是否是rar,zip
        $rule = [
            'file' =>'fileSize:2097152|fileExt:rar,zip'
        ];
        $validate = validate($rule)->check($file);
        if ($validate === true) {*/

            $fileSize = $file->getSize();
            $maxSize = 2 * 1024 * 1024; // 1MB，设置最大允许文件大小
            if ($fileSize > $maxSize) {
        		return $this->return_err(['msg'=>'文件大小超过限制，最大允许文件大小为2MB']);
            }

        	//后缀名
        	$fileExtension = $file->getOriginalExtension();
            if ($fileExtension!='zip') {
        		return $this->return_err(['msg'=>'文件类型错误']);
            }

        	//原始名称
        	$originalFileName = $file->getOriginalName();
	        // 将文件移动到指定的存储路径，这里使用本地存储示例，存储在public/uploads目录下
	        $info = Filesystem::disk('public')->putFileAs('sourcePackages/', $file,$originalFileName);
	        if (!$info) {
	        	return $this->return_error();
	        }
        // }

        /*// 创建 ZipArchive 实例
		$zip = new \ZipArchive();
		// 打开 ZIP 文件
		if ($zip->open($filePath.'/'.$info->getFilename()) === TRUE) {
		    // 解压 ZIP 文件到指定目录
		    $zip->extractTo($filePath);
		    $zip->close();
		    echo "ZIP 文件解压成功！";
		} else {
		    echo "无法打开 ZIP 文件。";
		}*/

		$data=["window_width"=>$windowWidth,"window_height"=>$windowHeight,"path"=>$entryPath];


		//修改小程序窗口大小
		$result=Applets::updateMiniProgramWindowSize(["appId"=>$appId],$data);
        return $this->return_msg($data);

        /*dump($_FILES["file"]);
		$target_dir = "./public/sourcePackages/"; // 目标目录
        move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);
        return $this->return_msg();*/
	}









}
